Oracle 取出动态sql 执行的结果的两种方式

您所在的位置:网站首页 oracle 导出查询结果 Oracle 取出动态sql 执行的结果的两种方式

Oracle 取出动态sql 执行的结果的两种方式

2024-06-03 07:59| 来源: 网络整理| 查看: 265

----------------------------以下是怎么取出动态sql执行结果的两种方式---------------------------------------------

第一种:直接  execute   immediate  ‘insert into   newTable  (id,name ) select id,name from dual’; 执行后 放到一个新的表里  

第二种方式:放到REF CURSOR 声明REF游标 

该方式分为两种:

第一种取出整表的所有列(USER_LOG  为我数据库中的表 ,自己测试需替换为自己的表)

create or replace procedure testdesclare1  is v_sql varchar2(1000); tp1 varchar2(100); tp2 varchar2(50);    tp8 varchar2(50); tp9 varchar2(50);   begin

    select to_char(sysdate,'yyyy')||'0101' into tp9 from dual;      select to_char(sysdate,'yyyyMMdd') into tp8 from dual;         tp1:='select * from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')';     tp2:=' between '||tp9||' and '||tp8;     --拼接动态sql语句     v_sql :=tp1||tp2;     --declare是执行一个代码块,开始有declare  begin end;为结构体 。 一个存储过程begin end 中只能声明一个declare     declare       --声明一个行类型变量USER_LOG%ROWTYPE  其中USER_LOG 与上面动态sql中的 查询表名一致     r_emp USER_LOG%ROWTYPE;  --声明一个行类型变量     TYPE c_type IS REF CURSOR; --声明REF游标类型     cur   c_type; --声明REF游标类型的变量      begin   -- 结构体开始      Open  cur For  v_sql;          loop          fetch cur into r_emp;          exit when cur%notfound;          dbms_output.put_line(r_emp.id||'='||r_emp.result);--取出里面的列值          /*结果是一个list:5175=共成功导入1条数据                                      5176=共成功导入1条数据           */         end loop;       close cur;       end; -- 结构体结束

end testdesclare1;

第一种取出表中的其中几列(USER_LOG  为我数据库中的表 ,自己测试需替换为自己的表)

create or replace procedure testdesclare1  is v_sql varchar2(1000); tp1 varchar2(100); tp2 varchar2(50);    tp8 varchar2(50); tp9 varchar2(50);   begin

    select to_char(sysdate,'yyyy')||'0101' into tp9 from dual;      select to_char(sysdate,'yyyyMMdd') into tp8 from dual;         tp1:='select  id,result from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')';     tp2:=' between '||tp9||' and '||tp8;     --拼接动态sql语句     v_sql :=tp1||tp2;

    --declare是执行一个代码块,开始有declare  begin end;为结构体 。 -一个存储过程begin end 中只能声明一个declare     declare     --声明一个行类型变量USER_LOG%ROWTYPE  其中USER_LOG 与上面动态sql中的 查询表名一致    r_emp_id USER_LOG.id%TYPE;  --声明一个列类型变量,与上面的整表不一致 

    r_emp_result USER_LOG.result%TYPE;  --声明一个列类型变量,与上面的整表不一致      TYPE c_type IS REF CURSOR; --声明REF游标类型     cur   c_type; --声明REF游标类型的变量     begin -- 结构体开始      Open  cur For  v_sql;          loop          fetch cur into r_emp_id ,r_emp_result ;          exit when cur%notfound;          dbms_output.put_line(r_emp_id||'='||r_emp_result);--取出里面的列值          /*结果是一个list:5175=共成功导入1条数据                                      5176=共成功导入1条数据           */         end loop;       close cur;       end; -- 结构体结束

end testdesclare1;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3